package com.sky.controller.user;

import com.sky.constant.JwtClaimsConstant;
import com.sky.dto.UserLoginDTO;
import com.sky.entity.User;
import com.sky.properties.JwtProperties;
import com.sky.result.Result;
import com.sky.service.UserService;
import com.sky.utils.JwtUtil;
import com.sky.vo.UserLoginVO;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;


@RestController
@RequestMapping("/user/user")
@Api(tags = "C端相关的接口")
@Slf4j
public class UserController {
    @Autowired
    private UserService userService;

    @Autowired
    private JwtProperties jwtProperties;//存的是 令牌相关信息

    @PostMapping("/login")
    public Result<UserLoginVO> login(@RequestBody UserLoginDTO userLoginDTO){
        log.info("登陆人授权");
        // service 完成登录业务  把code 给service 想微信服务器发起请求 得到 openid
        //  根据openid 数据库查有没有这个openid用户 有 说明老会员 可以得到用户id
        //  根据openid 数据查 没有这用户，说明是新用户  添加到数据库表user中，用户id 随着新增自增产生了。
        //
        User user = userService.wxLogin(userLoginDTO);

        UserLoginVO userLoginVO = new UserLoginVO();
        userLoginVO.setId(user.getId());
        userLoginVO.setOpenid(user.getOpenid());
        // 生成token  三部分  头.有效载荷.签名
        // 有效载荷以map集合形式
        Map<String,Object> clams = new HashMap<>();
        // 存储 存储用户id
        clams.put(JwtClaimsConstant.USER_ID,user.getId());
        //工具类产生
        //         JwtUtil.createJWT(用户秘钥,用户过期时间,载荷数据)
        String token = JwtUtil.createJWT(jwtProperties.getUserSecretKey(),
                                            jwtProperties.getUserTtl(),
                                                clams);
        userLoginVO.setToken(token);// 生成令牌

        return Result.success(userLoginVO);
    }

}
